home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
a_utils
/
ffccflow
/
ffccflow.lha
/
ffccc+flow
/
ffccc
/
REPNAM.f
< prev
next >
Wrap
Text File
|
1992-07-31
|
3KB
|
93 lines
SUBROUTINE REPNAM
*-----------------------------------------------------------------------
*
* Performs replacements of names, or names+strings attached
*
*-----------------------------------------------------------------------
include 'PARAM.h'
include 'ALCAZA.h'
include 'FLAGS.h'
include 'CURSTA.h'
include 'STATE.h'
include 'KEYCOM.h'
include 'JOBSUM.h'
DIMENSION KSP1(100),KSP2(100)
NCH=0
IPT=0
NMOD=IMODIF(NSTREF)
*--- check for 'REP' key
DO 10 IK=1,NGLSET
IF (KEYREF(IK,1).EQ.9) GOTO 20
10 CONTINUE
GOTO 999
20 CONTINUE
*--- check for name replacement
IF (KEYREF(IK,4).EQ.0) GOTO 999
DO 30 I=1,NSNAME
CALL NAMSRC(SNAMES(ISNAME+I),SKEYLS(KEYREF(IK,5)+1),
+ KEYREF(IK,4),IPOS,LAST)
IF (IPOS.EQ.0) GOTO 30
IPOS=IPOS+KEYREF(IK,5)
KREF1=KNAMRF(IPOS,1)
*--- check illegal
IF (KREF1.LT.0) GOTO 30
*--- name must behind last replacement
IF (NSSTRT(I).GT.IPT) THEN
*--- check for string following
KPOS=0
NSPEC=0
IF (KREF1.GT.0) THEN
CALL MATCH(SKYSTR,KKYSTA(KREF1),KKYEND(KREF1),SSTA,NSEND(
+ I)+1,NCHST,.TRUE.,KPOS,ILEV,NSPEC,KSP1,KSP2)
IF (KPOS.EQ.0) GOTO 30
ENDIF
*--- name (+string) do match
*--- set modify flag
IF (NMOD.LT.10) NMOD=NMOD+10
*--- copy from pointer up to name
L=NSSTRT(I)-IPT-1
IF (L.GT.0) THEN
IF (NCH+L.GT.MXLENG) GOTO 40
SSTR(NCH+1:NCH+L)=SSTA(IPT+1:IPT+L)
NCH=NCH+L
ENDIF
IPT=MAX(NSEND(I),KPOS)
KREF2=KNAMRF(IPOS,2)
IF (KREF2.GT.0) THEN
*--- non-empty replacement string exists
L=KKYEND(KREF2)-KKYSTA(KREF2)+1
IF (NSPEC.EQ.0) THEN
IF (NCH+L.GT.MXLENG) GOTO 40
*--- replace name by string
SSTR(NCH+1:NCH+L)=SKYSTR(KKYSTA(KREF2):KKYEND(KREF2))
NCH=NCH+L
ELSE
CALL REPSUB(KREF1,KREF2,NSPEC,KSP1,KSP2,NCH)
IF (NCH.GT.MXLENG) GOTO 40
ENDIF
ENDIF
ENDIF
30 CONTINUE
IF(NMOD.GE.10) THEN
*--- copy SSTR to SSTA, NCH to NCHST
L=NCHST-IPT
IF (L.GT.0) THEN
IF (NCH+L.GT.MXLENG) GOTO 40
SSTR(NCH+1:NCH+L)=SSTA(IPT+1:NCHST)
NCH=NCH+L
ENDIF
IMODIF(NSTREF)=NMOD
NCHST=NCH
SSTA(:NCH)=SSTR(:NCH)
ENDIF
GOTO 999
40 CONTINUE
WRITE (MPUNIT,10000)
CALL FLPRNT(1,'OVERFLOW',NLLINE(NSTREF)-NFLINE(NSTREF)+1, SIMA
+(NFLINE(NSTREF)),NDUMMY)
NSTATC(6)=NSTATC(6)+1
STATUS(11)=.TRUE.
10000 FORMAT(/' ++++++ Warning - replacements would lead to overflow',
+' in following statement, not done')
999 END